//////////////////////////////////////////////////////////////////////
// TextureFormat.h
//
// SHEN Fangyang
// me@shenfy.com
//
// Copyright (C) SHEN Fangyang, 2011, All rights reserved.
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
//  Brief Description
//
//	Texture format mappging
//
//////////////////////////////////////////////////////////////////////
#pragma once
#include <D3D10.h>
#include <ImgPtr.h>

namespace grflib
{
	namespace engine
	{
		namespace TextureSpec
		{
			enum TextureDimension {TD_1D = 1UL, TD_2D = 2UL, TD_3D = 3UL, TD_CUBE = 4UL};
			enum BindTarget {BT_NONE = 0UL, BT_RGBA = 1UL, BT_DEPTHSTENCIL = 2UL};
			enum TextureUsage {TU_GPU_READ = 1UL, TU_GPU_WRITE = 1UL << 1, TU_CPU_READ = 1UL << 2, TU_CPU_WRITE = 1UL << 3};
		}

		namespace core
		{
			namespace texture_format
			{
				//map image to DXGI_FORMAT
				DXGI_FORMAT Mapping(const w32lib::ImagePtr &imgPtr);

				//map DXGI_FORMAT to bit-per-channel and channel number
				bool Mapping(DXGI_FORMAT format, UINT _out_ &bpc, UINT _out_ &channel, bool _out_ &isFloat);
				
				//////////////////////////////////////////////////////////////
				//Resource Usage | Default | Dynamic | Immutable | Staging 
				//GPU-Read       | yes     | yes	     | yes       | yes 
				//GPU-Write      | yes     |         |           | yes
				//CPU-Read       |         |         |           | yes
				//CPU-Write      |         | yes     |           | yes
				//////////////////////////////////////////////////////////////
				//Input          | yes     | yes     | yes  
				//Output         | yes
				//////////////////////////////////////////////////////////////
				bool Mapping(D3D10_USAGE &d3dusage /*out*/, UINT &bindFlag /*out*/, UINT &cpuAccessFlag /*out*/, TextureSpec::TextureUsage usage, TextureSpec::BindTarget target);

			} //namespace vertex_format
		} //namespace core
	} //namespace engine
} //namespace grflib